﻿using AutoMapper;
using CodeSaude.Application.Interfaces;
using CodeSaude.Application.ViewModels;
using CodeSaude.Domain.Entities;
using CodeSaude.Domain.Interfaces.Service;
using System;
using System.Collections.Generic;

namespace CodeSaude.Application.Services
{
    public class PessoaApplicationService : BaseApplicationService, IPessoaApplicationService
    {
        private readonly IPessoaService _pessoaService;

        public PessoaApplicationService(IPessoaService pessoaService)
        {
            _pessoaService = pessoaService;
        }

        public void Create(PessoaViewModel model)
        {
            try
            {
                Pessoa pessoa = Mapper.Map<PessoaViewModel, Pessoa>(model);

                BeginTransaction();
                _pessoaService.Add(pessoa);
                Commit();
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void Dispose()
        {
            _pessoaService.Dispose();
        }

        public IEnumerable<PessoaViewModel> GetAll()
        {
            try
            {
                return Mapper.Map<IEnumerable<PessoaViewModel>>(_pessoaService.GetAll());
            }
            catch (Exception)
            {
                throw;
            }
        }

        public PessoaViewModel GetById(int id)
        {
            try
            {
                return Mapper.Map<PessoaViewModel>(_pessoaService.GetById(id));
            }
            catch (Exception)
            {

                throw;
            }
        }

        public void Delete(PessoaViewModel model)
        {
            try
            {
                Pessoa pessoa = _pessoaService.GetById(model.PessoaId);
                BeginTransaction();
                _pessoaService.Remove(pessoa);
                Commit();

            }
            catch (Exception)
            {
                throw;
            }
        }

        public void Update(PessoaViewModel model)
        {
            try
            {
                Pessoa pessoa = Mapper.Map<Pessoa>(model);
                BeginTransaction();
                _pessoaService.Update(pessoa);
                Commit();
            }
            catch (Exception)
            {
                throw;
            }
        }

    }
}
